package fr.auzaiphe.admin.bdd;

import java.sql.ResultSet;
import java.sql.SQLException;

import fr.auzaiphe.admin.model.Indice;



public class IndiceBDD {


	public BaseDeDonnee bdd;		// Pour l'intéraction avec l'indice
	//private int id;					// ID du joueur dans la base
	private Indice imageIndice;		// Image du joueur dans l'application

	/**
	 * Constructeur pincipale
	 * @param pBdd
	 * @param pIndice Image de l'indice de l'application
	 */
	public IndiceBDD(BaseDeDonnee pBdd, Indice pIndice)
	{
		this.bdd = pBdd;
		//this.id = -1;
		this.imageIndice = pIndice;

		this.sauvegarde();
	}

	/**
	 * Sauvegarde l'indice dans la base de donnée
	 */
	public void sauvegarde()
	{
		String requete;

		if (this.imageIndice.getId() == -1)
		{
			requete = "INSERT INTO INDICE(" +
					"INDICE_TEXTE," +
					"INDICE_TITRE," +
					"INDICE_LIEN_FICHIER," +
					"INDICE_DEBUT_VIE," +
					"INDICE_FIN_VIE," +
					"EVT_INDICE_ON," +
					"EVT_INDICE_OFF" +
					") VALUES(" +
					"'"+ this.imageIndice.getContenu().getTexte().replace('\'','’') +"'," +
					"'"+ this.imageIndice.getTitle().replace('\'','’') +"'," +
					"'"+ this.imageIndice.getContenu().getLienFichier().replace('\'','’') +"'," +
					"'"+ this.imageIndice.getDebutVie() +"'," +
					"'"+ this.imageIndice.getFinVie() +"'," +
					"'"+ this.imageIndice.getOn() +"'," +
					"'"+ this.imageIndice.getOff() +"'" +
					");";

			try
			{
				this.bdd.executerUpdate(requete);
				// Recupération de l'id d'ajout du champ
				ResultSet resultat = this.bdd.executerRequete("CALL IDENTITY()");
				resultat.next();
				this.imageIndice.setId(resultat.getInt(1));
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}

			// Ajout des liens entre l'indice et les joueurs qui voit l'indice
			for ( int i = 0; i < this.imageIndice.getJoueursVisibles().size(); i++ )
			{
				JoueurIndiceBDD.estVisiblePour( this.bdd, this.imageIndice, this.imageIndice.getJoueursVisibles().get(i) , 0);
			}

			// Ajout des liens entre l'indice et les joueurs qu'il concerne
			for( int j = 0; j < this.imageIndice.getJoueursLies().size(); j++ )
			{
				JoueurIndiceBDD.estAssocieA( this.bdd, this.imageIndice, this.imageIndice.getJoueursLies().get(j) , 0);
			}
		}
		else
		{
			requete ="UPDATE INDICE SET "+
			"INDICE_TEXTE='"+this.imageIndice.getContenu().getTexte().replace('\'','’')+"',"+
			"INDICE_LIEN_FICHIER='"+this.imageIndice.getContenu().getLienFichier().replace('\'','’')+"',"+
			"INDICE_TITRE='"+this.imageIndice.getTitle().replace('\'','’')+"',"+
			"INDICE_DEBUT_VIE='"+this.imageIndice.getDebutVie()+"',"+
			"INDICE_FIN_VIE='"+ this.imageIndice.getFinVie() +"'," +
			"EVT_INDICE_ON='"+ this.imageIndice.getOn() +"'," +
			"EVT_INDICE_OFF='"+ this.imageIndice.getOff() +"' " +
			"WHERE INDICE_ID="+this.imageIndice.getId()+";";

			try
			{
				this.bdd.executerUpdate(requete);
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}
			
			// Suppression des liens de visibilité et d'association de l'indice
			JoueurIndiceBDD.supprimerAssociationA( this.bdd , this.imageIndice );
			JoueurIndiceBDD.supprimerVisibiliteDe( this.bdd , this.imageIndice );
			
			// Ajout des nouveaux liens de l'indice
			
			// Ajout des liens entre l'indice et les joueurs qui voit l'indice
			for ( int i = 0; i < this.imageIndice.getJoueursVisibles().size(); i++ )
			{
				JoueurIndiceBDD.estVisiblePour( this.bdd, this.imageIndice, this.imageIndice.getJoueursVisibles().get(i) , 0);
			}

			// Ajout des liens entre l'indice et les joueurs qu'il concerne
			for( int j = 0; j < this.imageIndice.getJoueursLies().size(); j++ )
			{
				JoueurIndiceBDD.estAssocieA( this.bdd, this.imageIndice, this.imageIndice.getJoueursLies().get(j) , 0);
			}
		}
	}

	/**
	 * Supprimer l'indice dans la base de donnée
	 */
	public void supprimer() {
		String requete= "DELETE FROM INDICE WHERE INDICE_ID = '"+ this.imageIndice.getId() +"';";

		try {
			this.bdd.executerUpdate(requete);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * Affiche l'indice en console
	 */
	public void afficher() {
			System.out.println("-----------------------------------------------------------------------------");
			System.out.println("INDICE_ID\t\t"+this.imageIndice.getId());
			System.out.println("INDICE_TEXTE\t\t"+this.imageIndice.getContenu().getTexte());
			System.out.println("INDICE_LIEN_FICHIER\t"+this.imageIndice.getContenu().getTexte());
			System.out.println("INDICE_DEBUT_VIE\t"+this.imageIndice.getDebutVie());
			System.out.println("INDICE_FIN_VIE\t\t"+this.imageIndice.getFinVie());
			System.out.println("EVT_INDICE_ON='"+ this.imageIndice.getOn());
			System.out.println("EVT_INDICE_OFF='"+ this.imageIndice.getOff());
			System.out.println("-----------------------------------------------------------------------------");
	}

	/**
	 * retourne l'id de l'indice
	 */
	/*
	public int getId()
	{
		return id;
	}
	*/
}

